home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / yacc.arc / YACCDIFS.DOC < prev    next >
Text File  |  1985-09-04  |  5KB  |  216 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.                       Yacc Differences
  12.  
  13.  
  14.  
  15.  
  16.  
  17. This document gives a short list of differences between  the
  18. new Yacc and earlier Yaccs.
  19.  
  20. _B_u_g_s _F_i_x_e_d
  21.  
  22. 1.   There was a bug which caused  Yacc  to  silently  steal
  23.      away in the night if an action had mismatched '' in it;
  24.      this is fixed.
  25.  
  26. 2.   A number of table size overflow conditions used  to  be
  27.      checked incorrectly or not at all; this is now better.
  28.  
  29. 3.   A bug which suppressed the printing of some rules  with
  30.      empty RHS's on the y.output file has been fixed.
  31.  
  32. _S_p_e_e_d_u_p_s, _S_h_r_i_n_k_s, _a_n_d _D_i_d_d_l_e_s
  33.  
  34. 1.   The old optimizer (-o) flag is now the default in Yacc.
  35.      At the same time, the Yacc process itself has been sped
  36.      up; the result is that Yacc takes  about  the  same  or
  37.      slightly  longer on short inputs, but is much faster on
  38.      long inputs.
  39.  
  40. 2.   The optimized parsers produced by Yacc are likely to be
  41.      2-3  times  faster  and 1-2k bytes smaller than the old
  42.      ones, for medium/large grammars.  The time to parse  is
  43.      now  essentially  independent  of  the grammar size; it
  44.      used to grow as the size of the grammar did.
  45.  
  46. 3.   The y.output file has been considerably reformatted, to
  47.      make  it easier to read.  The old "goto" table is gone;
  48.      the goto's for nonterminal symbols are now  printed  in
  49.      the  states  where  they  occur.   Rules  which  can be
  50.      reduced in a state have their rule number printed after
  51.      them,  in  ().   This makes it much easier to interpret
  52.      the "reduce n" actions.  The message "same  as  n"  has
  53.      been  removed; duplicate states are in fact duplicated,
  54.      saving shuffling and cross-referencing.
  55.  
  56. 4.   Various table sizes are somewhat bigger.
  57.  
  58. 5.   The form feed character, and the construction '\f', are
  59.      now  recognized;  form feed is ignored (=whitespace) on
  60.      input.
  61.  
  62.  
  63.  
  64.  
  65.                       January 14, 1977
  66.  
  67.  
  68.  
  69.  
  70.  
  71.                            - 2 -
  72.  
  73.  
  74.  
  75. 6.   The arrays "yysterm" and "yysnter" are no  longer  pro-
  76.      duced  on  output; they were little used, and took up a
  77.      surprising amount of space in the parser.
  78.  
  79. 7.   Rules in the input which are not reduced are  now  com-
  80.      plained  about; they may represent unreachable parts of
  81.      the grammar, botched precedence,  or  duplicate  rules.
  82.      As  with  conflicts,  a summary complaint, "n rules not
  83.      reduced", appears at the terminal; more information  is
  84.      on the y.output file.
  85.  
  86. _N_e_w _F_e_a_t_u_r_e_s
  87.  
  88. 1.   The actions are now  copied  into  the  middle  of  the
  89.      parser, rather than being gathered into a separate rou-
  90.      tine.  It's faster.  Also, you can return a value  from
  91.      yyparse (and stop parsing...) by saying `return(x);' in
  92.      an action.  There are  macros  which  simulate  various
  93.      interesting parsing actions:
  94.  
  95.      YYERROR  causes the parser to behave as if a syntax
  96.      error had been encountered (i.e., do error recovery)
  97.      YYACCEPT causes a return from yyparse with a value of 0
  98.      YYABORT  causes a return from yyparse with a value of 1
  99.  
  100.  
  101. 2.   The repositioning of the actions may cause scope  prob-
  102.      lems  for  some people who include lexical analyzers in
  103.      funny places.  This can probably be  avoided  by  using
  104.      another  new  feature:  the `-d' option.  Invoking Yacc
  105.      with the -d option causes  the  #defines  generated  by
  106.      Yacc  to  be  written out onto a file called "y.tab.h",
  107.      (as well as on the "y.tab.c" file).  This can  then  be
  108.      included as desired in lexical analyzers, etc.
  109.  
  110. 3.   Actions  are  now  permitted  within  rules;  for  such
  111.      actions,  $$, $1, $2, etc. continue to have their usual
  112.      meanings.  An error  message  is  returned  if  any  $n
  113.      refers  to  a value lying to the right of the action in
  114.      the rule.  These internal actions are assumed to return
  115.      a  value,  which  is accessed through the $n mechanism.
  116.      In the y.output file, the actions are  referred  to  by
  117.      created  nonterminal  names  of  the  form  $$nnn.  All
  118.      actions within rules are assumed to  be  distinct.   If
  119.      some   actions   are   the   same,  Yacc  might  report
  120.      reduce/reduce conflicts  which  could  be  resolved  by
  121.      explicitly  identifying  identical actions; does anyone
  122.      have a good idea for a syntax to do this?  The  =  sign
  123.      may  now be omitted in action constructions of the form
  124.      ={  ...   }.
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.                       January 14, 1977
  132.  
  133.  
  134.  
  135.  
  136.  
  137.                            - 3 -
  138.  
  139.  
  140.  
  141. 4.   As a result of the rearrangement of rules,  people  who
  142.      thought they knew what $1 really turned into, and wrote
  143.      programs which referred to yypv[1], etc., are in  trou-
  144.      ble.  See Steve Johnson if you are really suffering.
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.                       January 14, 1977
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.